package com.zkhz.base.constant.enums;

import lombok.Getter;

/**
 * @Description 统一响应错误码
 *
 * @author wuzeqin
 * @date 2020/5/18
 **/
public enum ErrorStatus {

    A0001("用户端错误"),

    A0200("用户认证异常"),

    A0201("用户账户不存在"),

    A0210("用户密码错误"),

    A0220("租户不可用"),

    A0300("访问权限异常"),

    A0301("访问未授权"),

    B0001("系统执行出错"),

    /* ------- S03** 为数据异常。---------*/

    S0300("数据异常"),

    S0301("数据已存在"),

    S0302("数据不存在"),

    S0303("数据不可操作"),

    S0304("数据错误"),

    S0501("地图异常"),

    /* ------- S04** 为文件异常。---------*/
    S0400("文件异常"),
    S0401("文件已存在"),
    S0402("文件不存在"),
    S0403("文件不可操作"),
    S0410("文件名异常"),
    S0411("文件名错误"),
    S0412("文件名缺少后缀"),
    S0413("文件名后缀错误"),
    S0420("文件目录异常"),
    S0421("文件目录已存在"),
    S0422("文件目录不存在"),
    S0430("文件传输异常"),

    /* ------- S06** 为系统内部远程服务调用异常，如Feign、RestTemplate、HTTPClient等调用异常。---------*/
    S0600("RPC异常"),

    S0601("Feign调用异常"),

    S0602("Rest调用异常"),  //RestTemplate调用异常

    S0603("Http调用异常"),  //httpClient调用异常

    UNKNOWN("未知状态");

    @Getter
    private final String status;

    @Getter
    private final String detail;

    ErrorStatus(String detail) {
        this.status = name();
        this.detail = detail;
    }

    /**
     * 根据状态码获取枚举类型
     * @param status
     * @return
     */
    public static ErrorStatus resolve(String status) {
        if (status == null || status.isEmpty()) {
            return UNKNOWN;
        }
        for (ErrorStatus errorStatus : values()) {
            if (errorStatus.status.equals(status)) {
                return errorStatus;
            }
        }
        return UNKNOWN;
    }

}
